/**
 对象数组与管理
 使用对象数组实现Chicken对象的管理
 tip1 动态数组算法(数组Size扩容)
 
*/
import java.util.Arrays;
public class 对象数组
{
	public static void main(String[] args){
		ChickenManager cm=new ChickenManager(5);
		//添加
		cm.add(new Chicken(1,"小白",5));
		cm.add(new Chicken(2,"小黑",3));
		cm.add(new Chicken(3,"小兰",8));
		System.out.println("不满时的数组长度 "+cm.length());
		cm.add(new Chicken(4,"小黄",2));
		cm.add(new Chicken(5,"小红",6));
		cm.add(new Chicken(6,"小不",4));//超出定义的数组大小5
		System.out.println("自动扩容后的数组长度 "+cm.length());
		//查找
		System.out.println("=======查找======");
		cm.find(5).print();
		System.out.println("=====打印全部=====");
		cm.printAll();
		// 删除
		System.out.println("=====删除=====");
		cm.delete(3);
		cm.printAll();
		//更新
		System.out.println("=====更新=====");
		cm.updata(new Chicken( 2,"小小小小鸡",1));
		cm.printAll();
		
	}
}
//管理类
class ChickenManager{
	private Chicken[] cs=null;
	private int count=0;//记录数组里元素个数,数组序号从0开始，5个元素的话，最后一个元素下标为[4]
	
	public ChickenManager(int size){
		if(size>0){
			cs=new Chicken[size];
		}else{
			cs=new Chicken[5];
		}
	}
	public int length(){
		return cs.length;
	}
	//添加.实现动态数组
	public void add(Chicken c){
		if (count>=cs.length){//如果元素数大于等于定义的数组大小，需要扩容
			int tmplen=cs.length*2;
			cs=Arrays.copyOf(cs,tmplen);
		}
			cs[count]=c;
			count++;//每添加一个chicken对象，count+1
		
	}
	//删除，删除位置后面向前挪动
	public void delete(int id){
		for(int i=0;i<count;i++){
			//if判断，找到对象后，遍历后面的对象向前挪动
			if(cs[i].getId()==id){
				//从i位置依次赋值后面的对象
				//直到倒数第二个(即cs[count-2]),最后一个设置(cs[count-1])为空
				for(int j=i;j<count-1;j++){
					cs[j]=cs[j+1];
					
				}
				cs[count-1]=null;//最后一位设置空
				count--;//删除之后，计数器减1
				break;
			}
		}
	}
	//更新
	public void updata(Chicken c){
	   Chicken temp=find(c.getId());
	   if(temp!=null){
		   temp.setAge(c.getAge());
		   temp.setId(c.getId());
		   temp.setName(c.getName());
		   
	   }
		
	}
	//查找，不需要查全部数组(可能添加的还不满)，只需查找count数就行(<=count-1同<count)
	public Chicken find(int id){
		for(int i=0;i<count;i++){
			if(id==cs[i].getId()){
				return cs[i];                				
			}
		}
		return null;
	}
	//打印全部
	public void printAll(){
		for(int i=0;i<count;i++){
			cs[i].print();
		}
	}
}

//小鸡类   数据类 value object(VO)
class Chicken{
	private int id;
	private String name;
	private int age;
	public Chicken(){};
	public Chicken(int id,String name,int age){
		this.age=age;
		this.id=id;
		this.name=name;
	}
	public void setId(int id){
		this.id=id;
	}
	public void setName(String name){
		this.name=name;
	}
	public void setAge(int age){
		this.age=age;
	}
	public int getId(){
		return id;
	}
	public int getAge(){
		return age;
	}
	public String getName(){
		return name;
	}
	public void print(){
		System.out.println("id="+id+",name="+name+",age="+age);
	}
}
